Redis哨兵模式配置详解

您所在的位置:网站首页 redis 哨兵配置详解 Redis哨兵模式配置详解

Redis哨兵模式配置详解

2024-07-17 19:38| 来源: 网络整理| 查看: 265

        主从复制模式,它是属于 Redis 多机运行的基础,但这种模式本身存在一个致命的问题,当主节点奔溃之后,需要人工干预才能恢复 Redis 的正常使用。

        我们需要一个自动的工具——Redis Sentinel(哨兵模式)来把手动的过程变成自动的,让 Redis 拥有自动容灾恢复(failover)的能力。

        哨兵就相当于对主从服务器做一个监视的任务。一旦发现主服务器宕机了,就迅速启动相应的规则将某一台从服务器升级为主服务器,无需人工干预,更稳定更快。

        哨兵模式需要依赖主从复制模式,主从复制模式详解参见我的微博 【Redis主从复制模式配置详解】

        哨兵模式结构图如下:

1、哨兵模式配置

配置哨兵模式的前提是实现了主从复制模式的配置,即一个主服务,2个从服务。

1.1创建哨兵配置文件

最少创建三个哨兵,注意哨兵的数量是奇数。

创建哨兵配置文件目录

        在redis 目录(/usr/local/redis-7.2.4)下,创建一个哨兵配置文件目录 sentinel-conf

mkdir sentinel-conf

创建第一个哨兵配置文件并修改配置

        在redis目录下,拷贝sentinel.conf到sentinel-conf目录下,命名为sentinel-26381.conf

cp sentinel.conf sentinel-conf/sentinel-26381.conf

修改配置文件sentinel-26381.conf

vim sentinel-26381.conf

修改项目如下:

#修改port port 26381 #开启守护线程 daemonize yes #进程文件 pidfile /var/run/redis-sentinel-26381.pid #sentinel monitor #master-group-name是集群名称,可以自定义, #ip:master主机ip地址 #quorum哨兵数量,是需要同意主节点不可用的Sentinel的数量,一般是哨兵数量减1 #比如2表示,当至少有2个哨兵发现master的redis挂了, # 那么就将此master标记为宕机节点。 # 这个时候就会进行故障的转移,将其中的一个从节点变为master sentinel monitor mymaster 127.0.0.1 6380 2

如下图:

 

创建第二个和第三个哨兵配置文件并修改配置并修改端 cp sentinel-26381.conf sentinel-26382.conf cp sentinel-26381.conf sentinel-26383.conf

 修改sentinel-26382.conf:

vim sentinel-26382.conf

 修改内容同上,如下图:

 同样修改sentinel-26383.conf

vim sentinel-26383.conf

1.2配置哨兵监听

分别修改vim sentinel-26381.conf、

vim sentinel-26382.conf、

vim sentinel-26383.conf

主要改如下四个配置:

# 第三个参数:哨兵名字,可自行修改。(若修改了,那后面涉及到的都得同步) # 第四个参数:master主机ip地址 # 第五个参数:redis端口号 # 第六个参数:哨兵的数量。比如2表示,当至少有2个哨兵发现master的redis挂了, # 那么就将此master标记为宕机节点。 # 这个时候就会进行故障的转移,将其中的一个从节点变为master sentinel monitor mymaster 192.168.101.123 7001 2 # master中redis的密码 sentinel auth-pass mymaster 123456 # 哨兵从master节点宕机后,等待多少时间(毫秒),认定master不可用。 # 默认30s,这里为了测试,改成10s sentinel down-after-milliseconds mymaster 10000 # 当替换主节点后,剩余从节点重新和新master做同步的并行数量,默认为 1 sentinel parallel-syncs mymaster 1 # 主备切换的时间,若在3分钟内没有切换成功,换另一个从节点切换 sentinel failover-timeout mymaster 180000

 修改结果如下:

sentinel-26381.conf

 sentinel-26382.conf

sentinel-26383.conf

2、哨兵模式测试

 先关闭redis所有服务

2.1启动三个主从服务

为了在一台主机上模拟启动三个服务,我们在shell开三个窗口,分别启动主从服务 6380、从服务6381、6382,不在后台启动

主服务 6380

redis-server redis-master.conf

从服务1  6381

redis-server /usr/local/redis-7.2.4/redis-conf/redis-slave1.conf

从服务2 6382

redis-server /usr/local/redis-7.2.4/redis-conf/redis-slave2.conf

 2.2启动哨兵服务

也是为了模拟测试,启动三个不同的shell

启动哨兵一 26381

为了测试,在配置文件中把守护模式改为 no

redis-sentinel /usr/local/redis-7.2.4/sentinel-conf/sentinel-26381.conf

 如果报如下错误,正常启动请忽略:

7790:X 08 Mar 2024 05:35:43.959 # WARNING Memory overcommit must be enabled! Without it, a background save or replication may fail under low memory condition. Being disabled, it can also cause failures without low memory condition, see https://github.com/jemalloc/jemalloc/issues/1328. To fix this issue add 'vm.overcommit_memory = 1' to /etc/sysctl.conf and then reboot or run the command 'sysctl vm.overcommit_memory=1' for this to take effect.

这是由于  Redis 容器日志中的警告信息指出了内存超分配(overcommit)的设置问题。在 Linux 系统中,内存超分配是一种内核行为,允许进程分配超出物理内存大小的虚拟内存。对于 Redis,这是一个重要的设置,尤其是当执行如 RDB 快照或 AOF 日志重写等内存密集型操作时。

 解决办法:

临时更改(不会在重启后保持):

在宿主机上执行以下命令:

sudo sysctl vm.overcommit_memory=1

永久更改:

编辑 /etc/sysctl.conf 文件(或在某些系统上,可能是 /etc/sysctl.d/ 目录下的文件)。

添加或修改以下行:

vm.overcommit_memory = 1

保存文件并重新启动系统,或者运行 sudo sysctl -p 来立即应用更改。

启动后如下:

启动后,主服务6380也可以感知到

启动哨兵二 26382

为了测试,在配置文件中把守护模式改为 no

再启动

redis-sentinel /usr/local/redis-7.2.4/sentinel-conf/sentinel-26382.conf

 启动后后,主服务6380也有反应

启动哨兵三26383 

redis-sentinel /usr/local/redis-7.2.4/sentinel-conf/sentinel-26383.conf

 2.3模拟测试

1.模拟强制关闭主服务redis-master 6380

主服务redis-master 6380已经关闭

2. 30秒后,查看哨兵启动窗口,发现主服务从6380 切换到6381

再看从服务,顺利连到6381 

 重启启动强制挂掉的6380

再看6381,已经检测到6380已经连接

再重复一遍,如果挂了6381,则6382显示如下:

 30秒后,又切换到6380

 这样就配置成功了。



【本文地址】


今日新闻


推荐新闻


    CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3